home *** CD-ROM | disk | FTP | other *** search
- /*------------------------------------------------------------------*/
- /* */
- /* MC68000 Cross Assembler */
- /* */
- /* Copyright (c) 1985 by Brian R. Anderson */
- /* */
- /* Global variables - September 3, 1987 */
- /* */
- /* This program may be copied for personal, non-commercial use */
- /* only, provided that the above copyright notice is included */
- /* on all copies of the source code. Copying for any other use */
- /* without the consent of the author is prohibited. */
- /* */
- /*------------------------------------------------------------------*/
- /* */
- /* Originally published (in Modula-2) in */
- /* Dr. Dobb's Journal, April, May, and June 1986. */
- /* */
- /* AmigaDOS conversion copyright (c) 1987 by Charlie Gibbs. */
- /* */
- /*------------------------------------------------------------------*/
-
- #ifdef PRIMARY
- #define GLOBAL
- #else
- #define GLOBAL extern
- #endif
-
- GLOBAL char SourceFN[MAXFN]; /* Source file name */
- GLOBAL char HeaderFN[MAXFN]; /* Header file name */
- GLOBAL FILE *InFile, *List, *Srec; /* File pointers */
- GLOBAL char InclList[MAXLINE]; /* List of directories to search */
- GLOBAL char IdntName[MAXLINE]; /* Program unit name */
- GLOBAL int LnCnt; /* Number of lines on current page */
- GLOBAL int LnMax; /* Maximum number of lines per page */
- GLOBAL int PgCnt; /* Page number */
- GLOBAL int XrefList; /* Produce a cross-reference listing */
- GLOBAL int ListOff; /* Suppress the listing file */
- GLOBAL int DumpSym; /* Dump the symbol table */
-
- GLOBAL char TTLstring[MAXLINE]; /* Title string */
-
- GLOBAL int LabLine; /* Last labeled line number */
- GLOBAL int LineCount; /* Source line counter */
- GLOBAL char Line[MAXLINE]; /* Current source line */
- GLOBAL char Label[MAXLINE]; /* Instruction label */
- GLOBAL char OpCode[MAXLINE]; /* Instruction mnemonic */
- GLOBAL char SrcOp[MAXLINE]; /* First (source) operand */
- GLOBAL char DestOp[MAXLINE]; /* Second (destination) operand */
- GLOBAL int OpLoc, SrcLoc, DestLoc; /* Operands start here */
- GLOBAL int Dir, PrevDir; /* Assembler directive */
- GLOBAL int NumSyms; /* Number of symbols */
- GLOBAL long ObjOp, ObjSrc, ObjDest; /* OpCode, Source, Dest. */
- GLOBAL char ObjString[MAXLINE]; /* String data */
- GLOBAL int nO, nS, nD, nX; /* Length of above components */
- GLOBAL int PrntAddr; /* Print AddrCnt on listing */
- GLOBAL int SuppList; /* Suppress listing file */
- GLOBAL long Hunk2; /* Hunk number (from GetValue) */
- GLOBAL int DefLine2; /* Definition line number */
- GLOBAL int GotEqur; /* We have register equates */
-
- GLOBAL int Pass2; /* Pass 2 flag */
- GLOBAL long AddrCnt; /* Location counter */
- GLOBAL long AddrAdv; /* Bump AddrCnt by this much */
- GLOBAL long EndAddr; /* END statement transfer address */
- GLOBAL long SectStart; /* Current section (or portion) starts here */
- GLOBAL int SectLine; /* Line number where section started */
- GLOBAL long HunkType; /* Current hunk type */
- GLOBAL long HunkFlags; /* Hunk flags (MEMF_FAST or MEMF_CHIP) */
- GLOBAL long CurrHunk; /* Current hunk number */
- GLOBAL long NextHunk; /* Next available hunk number */
- GLOBAL long LenPos; /* Seek position of current hunk length */
-
- GLOBAL int SFormat; /* Generate S-record format */
- GLOBAL long StartAddr; /* Address that record starts on */
- GLOBAL long TempAddr; /* Address of where we are now */
-
- struct SymTab { /* Symbol table */
- char *Nam; /* Pointer to symbol (on heap) */
- long Val; /* Value */
- long Hunk; /* Hunk no. (~(external symbol heap offset) if < 0) */
- int Defn; /* Line number where defined */
- int Flags; /* Flags bits: 0 - XREF
- 1 - XDEF
- 2 - SET
- 3 - MACRO (symbol is preceded by blank)
- 4 - SECTION (name preceded by 2 blanks)
- 5 - register name (EQUR)
- 6 - register list (REG) */
- struct Ref *Ref1; /* Pointer to first reference entry */
- };
- GLOBAL struct SymTab *SymStart; /* The symbol table starts here */
- GLOBAL struct SymTab *Sym; /* ReadSymTab sets this up */
- GLOBAL struct SymTab *Sect; /* Current section's entry */
-
- struct Ref { /* Reference entry */
- struct Ref *NextRef; /* Pointer to next reference entry */
- int RefNum[MAXREF]; /* Reference line numbers */
- };
- GLOBAL struct Ref *RefStart; /* Reference entries start here */
-
- struct RelTab { /* Relocation table - goes on the heap */
- long Offset; /* Offset to relocatable value */
- long Hunk; /* Hunk type to relocate relative to */
- int Size; /* Size of relocatable value */
- };
- GLOBAL struct RelTab *RelStart; /* Relocation data starts here */
-
- struct TermStack { /* Parser's term stack */
- long value; /* Value */
- int hunk; /* Hunk number */
- int oploc; /* Location in source statement */
- int defline; /* Line number where defined */
- };
- GLOBAL struct TermStack *Term; /* Term stack pointer */
-
- struct OpStack { /* Parser's operator stack */
- char chr; /* Operator character */
- int prec; /* Precedence */
- };
- GLOBAL struct OpStack *Ops; /* Operator stack pointer */
-
- GLOBAL char *Heap; /* Primary heap - allocated by "malloc" */
- GLOBAL char *HeapLim; /* Next unused space on the heap */
- GLOBAL char *HighHeap; /* High-water mark on the heap */
- GLOBAL char *LowHeap; /* Low limit from top of heap */
-
- GLOBAL int InFNum; /* Current input nesting level */
- struct InFCtl {
- long Pos; /* Current position in input */
- char *UPtr; /* Current position in user macro or 0 */
- char *NPtr; /* File name stack pointer */
- int Line; /* Current line number in this file */
- int NArg; /* Number of macro arguments or -1 */
- int MCnt; /* Macro expansion number (for \@) */
- };
- GLOBAL struct InFCtl *InF; /* Macro/include file stack pointer */
- GLOBAL struct InFCtl *LowInF; /* "Low-water mark" for InF */
- GLOBAL char *Heap2; /* Secondary heap */
- GLOBAL char *NextFNS; /* Next input file path/name */
- GLOBAL char *High2; /* Secondary high-water mark */
- GLOBAL char *Low2; /* Low limit from top of heap */
-
- GLOBAL int OuterMac; /* Level number of outermost macro */
- GLOBAL int MacCount; /* Number of macros expanded */
- GLOBAL int SkipNest; /* Skipped IF/ENDC nesting count */
-
- struct OpConfig { /* Operand configuration */
- long Value; /* Value */
- long Hunk; /* Hunk number */
- int Defn; /* Line number where defined */
- int Mode; /* Addressing mode */
- int Loc; /* Location of operand on Line */
- int Rn; /* Register number */
- int Xn; /* Index register number */
- int Xsize; /* Size of index */
- int X; /* Is index Data or Address reg? */
- };
- GLOBAL struct OpConfig Src, Dest; /* Source and destination operands */
-
- GLOBAL int Size; /* size for OpCode */
- GLOBAL int InstSize; /* Size of instruction, including operands */
- GLOBAL int AdrModeA; /* Addressing modes for this instruction */
- GLOBAL int AdrModeB; /* ditto */
- GLOBAL int Op; /* Raw bit pattern for OpCode */
-
- GLOBAL int ErrorCount;
-
- /* Error message tables */
- GLOBAL int errlim, errcode[ERRMAX], errpos[ERRMAX];
-